/**
 * 
 */
package es.ibm.santillana.mdm.workflow.creacion;


import java.util.Iterator;

import com.ibm.pim.attribute.AttributeInstance;
import com.ibm.pim.catalog.Catalog;
import com.ibm.pim.catalog.CatalogManager;
import com.ibm.pim.catalog.item.Item;
import com.ibm.pim.collaboration.CollaborationItem;
import com.ibm.pim.collaboration.CollaborationStep;
import com.ibm.pim.collaboration.ItemCollaborationArea;
import com.ibm.pim.collection.PIMCollection;
import com.ibm.pim.common.ExtendedValidationErrors;
import com.ibm.pim.common.exceptions.PIMInvalidOperationException;
import com.ibm.pim.context.Context;
import com.ibm.pim.context.PIMContextFactory;
import com.ibm.pim.extensionpoints.WorkflowStepFunction;
import com.ibm.pim.extensionpoints.WorkflowStepFunctionArguments;
import com.ibm.pim.utils.Logger;

import es.ibm.santillana.mdm.common.bussinesmodel.BussinesRules;
import es.ibm.santillana.mdm.common.bussinesmodel.ConfigModel;
import es.ibm.santillana.mdm.common.bussinesmodel.WorkflowManagement;
import es.ibm.santillana.mdm.common.util.ConstSantillana;
import es.ibm.santillana.mdm.common.util.SantillanaLogger;

/**
 * @author Benito
 *
 */
public class Catalogar implements WorkflowStepFunction {

	/**
	 * 
	 */
	public Catalogar() {
		// TODO Auto-generated constructor stub
	}

	/* (non-Javadoc)
	 * @see com.ibm.pim.extensionpoints.WorkflowStepFunction#in(com.ibm.pim.extensionpoints.WorkflowStepFunctionArguments)
	 */
	@Override
	public void in(WorkflowStepFunctionArguments arg0) {
		// TODO Auto-generated method stub
		Logger log = SantillanaLogger.getLogger();
		log.logInfo("IN del paso Catalogar");
		PIMCollection <CollaborationItem> collabItems = arg0.getItems();
		Iterator <CollaborationItem> it = collabItems.iterator();
		ItemCollaborationArea itmColArea = (ItemCollaborationArea) arg0.getCollaborationStep().getCollaborationArea();
		Context ctxPIM = PIMContextFactory.getCurrentContext();
		CatalogManager canMan = ctxPIM.getCatalogManager();
		CollaborationStep colStep =  itmColArea.getStep("Enriquecimiento general");
		System.out.println(colStep.getName());
		Catalog ctg = canMan.getCatalog(ConstSantillana.MAESTRO_ARTICULOS);
		while (it.hasNext()) {
			CollaborationItem itmCol = it.next();
			String sPk = itmCol.getPrimaryKey();
			
			Item itm = ctg.getItemByPrimaryKey(sPk);
			System.out.println("Dentor de whlile ");
			if (itm != null) {
				System.out.println("Item en el catalogo " + sPk);
				Boolean enriquecido = (Boolean) itm.getAttributeValue(ConstSantillana.ENRIQUECIDO);
				if (enriquecido == null) { enriquecido = false; }
				if (enriquecido){
					System.out.println("Item enriquecido");
					//itmColArea.moveToNextStep(itmCol, colStep, "Pasar a enriquecer");
					System.out.println("Hago algo?");
					
				}
				else {
					System.out.println("Voy a borrarlo");
					itmColArea.drop(itmCol);
				}
			}
//			AttributeInstance atInPk = itmCol.getAttributeInstance("Generales/Clave");
//			System.out.println("sPk "+sPk);
//			String newPk =  BussinesRules.checkNextId(ctxPIM, sPk, atInPk, itmColArea.getSourceCatalog());
//			System.out.println("newPk "+newPk);
//			if (!sPk.equals(newPk)){
//				atInPk.setValue(newPk);
//				//itmCol.setPrimaryKey(newPk);
//			}
		}
	}

	/* (non-Javadoc)
	 * @see com.ibm.pim.extensionpoints.WorkflowStepFunction#out(com.ibm.pim.extensionpoints.WorkflowStepFunctionArguments)
	 */
	@Override
	public void out(WorkflowStepFunctionArguments arg0) {
		Logger log = SantillanaLogger.getLogger();
		
		PIMCollection <CollaborationItem> collabItems = arg0.getItems();
		
		log.logInfo("OUT del paso Catalogar");
		System.out.println("OUT del paso Catalogar");
		Iterator <CollaborationItem> it = collabItems.iterator();
		Context ctxPIM = PIMContextFactory.getCurrentContext();
		CatalogManager canMan = ctxPIM.getCatalogManager();
		Catalog ctg = canMan.getCatalog(ConstSantillana.MAESTRO_ARTICULOS);
		System.out.println("out cat antes wile");
		while (it.hasNext()) {
			CollaborationItem itmCol = it.next();
			String sPk = itmCol.getPrimaryKey();
			Item itm = ctg.getItemByPrimaryKey(sPk);
			System.out.println("out cat dentro wile");
			if (itm != null && (Boolean) itm.getAttributeValue(ConstSantillana.ENRIQUECIDO)) {
				
					System.out.println("Paso a enriquecer directamente");
			}
			else {
				System.out.println("item vacio");
				log.logInfo("Tratando item11 "+itmCol.getPrimaryKey());
				
				String tipografia = (String) itmCol.getAttributeValue(ConstSantillana.TIPOLOGIA_DESC);
				String empresa = (String) itmCol.getAttributeValue(ConstSantillana.SOCIEDADES);
				String tipografiaID = null;
				String empresaID;
				log.logInfo("tipografia "+tipografia);
				System.out.println("tipografia "+tipografia);
				log.logInfo("empresa "+empresa);
				System.out.println("empresa "+empresa);
				//get the tipo category ID  
				try{
					if (tipografia != null){
						tipografiaID = tipografia.split("-")[0].trim();
						log.logInfo("tipografiaID "+tipografiaID);
						WorkflowManagement.mapToCategory(tipografiaID, ConstSantillana.JERARQUIA_TIPO_DE_PRODUCTO, itmCol);
						AttributeInstance attIn = itmCol.getAttributeInstance(ConstSantillana.TIPOLOGIA);
						Item itmTip = ConfigModel.getItemFromCatalog(tipografiaID, ConstSantillana.CATALOGO_TIPOLOGIAS);
						attIn.setValue(itmTip);
					}
					
					//get the empresa category ID
					if (empresa != null){
						empresaID = empresa.split("-")[0].trim();
						System.out.println("out del cat vamooo");
						String idSocTip = empresaID+tipografiaID;
						log.logInfo("idSocTip "+idSocTip);
						WorkflowManagement.mapToCategory(idSocTip, ConstSantillana.JERARQUIA_SOCIEDADES, itmCol);
						WorkflowManagement.mapToCategory(empresaID, ConstSantillana.JERARQUIA_PAISES, itmCol);
						AttributeInstance attIn = itmCol.getAttributeInstance(ConstSantillana.EMPRESA_ID);
						//Item itmSoc = ConfigModel.getItemFromCatalog(tipografiaID, ConstSantillana.CATALOGO_SOCIEDADES);
						itmCol.setAttributeValue("Generales/DESC_Empresa_Editora", null);
						attIn.setValue(null);
					}
					log.logInfo("Fin de mapeo");
					ExtendedValidationErrors errors = itmCol.save();
				
			
				}catch(PIMInvalidOperationException e) {
					e.printStackTrace();
					log.logInfo("Error Tratando item " + e.getMessage());
				}
			}
		}
	}

	/* (non-Javadoc)
	 * @see com.ibm.pim.extensionpoints.WorkflowStepFunction#timeout(com.ibm.pim.extensionpoints.WorkflowStepFunctionArguments)
	 */
	@Override
	public void timeout(WorkflowStepFunctionArguments arg0) {
		// TODO Auto-generated method stub

	}

}
